cryptography discrete logarithm problem